home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / MSLpatches / ->MSL C.sit / ->MSL C / ->MSL Mac / into Source / utime.mac.c / utime.mac.c
Encoding:
C/C++ Source or Header  |  1997-05-22  |  2.6 KB  |  122 lines  |  [TEXT/CWIE]

  1. /*  Metrowerks Standard Library  Version 2.1.2b7  1997 May  */
  2.  
  3. /*
  4.  *    File:        utime.c
  5.  *                ©1993-1996 metrowerks Inc. All rights reserved
  6.  *    Author:        Berardino E. Baratta
  7.  *
  8.  *    Content:    Interface file to standard UNIX-style entry points ...
  9.  *
  10.  *    NB:            This file implements some UNIX low level support.  These functions
  11.  *                are not guaranteed to be 100% conformant.
  12.  *
  13.  */
  14.  
  15. #include <utime.h>
  16.  
  17. #include <errno.h>
  18.  
  19. #include <Files.h>
  20. #include <LowMem.h>
  21. #include <Types.h>
  22. #include <time.mac.h>                  /*mm970521 */
  23.  
  24. /* function prototypes for externally defined functions */
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28.  
  29. extern int    __ctopstring(const char *cstring, Str255 pstring);
  30.  
  31. #ifdef __cplusplus
  32. }
  33. #endif
  34.  
  35. /*
  36.  *    Set the file time stamps.
  37.  */
  38. static int __settime(Str255 ppath, unsigned long modtime)
  39. {
  40.     HFileInfo        pb;
  41.     short            vrefnum = 0;
  42.     long            dirid = 0L;
  43.     OSErr            err = noErr;
  44.  
  45.     pb.ioNamePtr = ppath;
  46.     pb.ioVRefNum = vrefnum;
  47.     pb.ioDirID = dirid;
  48.     pb.ioFVersNum = 0;
  49.     pb.ioFDirIndex = 0;
  50.  
  51.     err = PBHGetFInfoSync((HParmBlkPtr)&pb);
  52.     if (err == noErr) {
  53.         pb.ioNamePtr = ppath;
  54.         pb.ioVRefNum = vrefnum;
  55.         pb.ioDirID = dirid;
  56.         pb.ioFVersNum = 0;
  57.         pb.ioFDirIndex = 0;
  58.         pb.ioFlMdDat = modtime;
  59.  
  60.         err = PBHSetFInfoSync((HParmBlkPtr)&pb);
  61.     }
  62.  
  63.     if (err != noErr)
  64.         errno = err;
  65.     return (err == noErr ? 0 : -1);
  66. }
  67.  
  68. /*
  69.  *    Set the file time stamps.
  70.  */
  71. int utime(const char *path, const struct utimbuf *buf)
  72. {
  73.     Str255            ppath;
  74.     unsigned long    modtime = NULL;
  75.  
  76.     if (path) {
  77.         /* convert the C string into a Pascal string */
  78.         if (__ctopstring(path, ppath) != noErr) return (-1);
  79.  
  80.         if (buf != NULL && buf->modtime != NULL)
  81.             modtime = buf->modtime;            /* we ignore the access time on the Mac */
  82.  
  83.         if (modtime == NULL)
  84.             GetDateTime(&modtime);            /* set it to the current time */
  85.         else                                     /* mm 970521*/
  86.             modtime -= _mac_unix_epoch_offset_;  /* mm 970521*/
  87.  
  88.         return (__settime(ppath, modtime));
  89.     }
  90.  
  91.     return (-1);
  92. }
  93.  
  94. /*
  95.  *    Set the file time stamps.
  96.  */
  97. int utimes(const char *path, struct timeval buf[2])
  98. {
  99.     Str255            ppath;
  100.     unsigned long    modtime;
  101.  
  102.     if (path) {
  103.         /* convert the C string into a Pascal string */
  104.         if (__ctopstring(path, ppath) != noErr) return (-1);
  105.     
  106.         modtime = buf[1].tv_sec;
  107.     
  108.         if (modtime == NULL)
  109.             GetDateTime(&modtime);            /* set it to the current time */
  110.         else                                     /* mm 970521*/
  111.             modtime -= _mac_unix_epoch_offset_;  /* mm 970521*/
  112.  
  113.         return (__settime(ppath, modtime));
  114.     }
  115.  
  116.     return (-1);
  117. }
  118. /*  Change Record
  119.  *    30-Dec-95  JFH  Removed uses of OLDROUTINENAMES
  120.  *  mm 970521       Added correction for difference in 1900Jan01 and 1904Jan01 epochs
  121. */
  122.